package yxy.game.pm2.module.battle;

import yxy.cherry.battle.module.PropertyData;
import yxy.cherry.battle.module.PropertyType;

import java.util.Map;

public class PropertyModule {

    private long att; // 攻击
    private long pdef; // 物防
    private long sefe; // 法防
    private long life; // 生命
    private long str; // 暴击
    private long ant; // 抗暴
    private long bus; // 暴伤
    private long bud; // 韧性
    private long fit; // 命中
    private long dog; // 闪避
    private long ctl; // 控制
    private long rss; // 抗控
    private long tre; // 治疗
    private long trp; // 受疗
    private long pdefup; // 物伤
    private long sefeup; // 法伤
    private long pdefgd; // 物免
    private long sefegd; // 法免
    private long speed; //速度

    private long attAdd; // 攻击 增幅
    private long pdefAdd; // 物防 增幅
    private long sefeAdd; // 法防 增幅
    private long lifeAdd; // 生命 增幅

    public long getSpeed() {
        return speed;
    }

    public void setSpeed(long speed) {
        this.speed = speed;
    }

    public long getAtt() {
        return att;
    }

    public void setAtt(long att) {
        this.att = att;
    }

    public long getPdef() {
        return pdef;
    }

    public void setPdef(long pdef) {
        this.pdef = pdef;
    }

    public long getSefe() {
        return sefe;
    }

    public void setSefe(long sefe) {
        this.sefe = sefe;
    }

    public long getLife() {
        return life;
    }

    public void setLife(long life) {
        this.life = life;
    }

    public long getStr() {
        return str;
    }

    public void setStr(long str) {
        this.str = str;
    }

    public long getAnt() {
        return ant;
    }

    public void setAnt(long ant) {
        this.ant = ant;
    }

    public long getBus() {
        return bus;
    }

    public void setBus(long bus) {
        this.bus = bus;
    }

    public long getBud() {
        return bud;
    }

    public void setBud(long bud) {
        this.bud = bud;
    }

    public long getFit() {
        return fit;
    }

    public void setFit(long fit) {
        this.fit = fit;
    }

    public long getDog() {
        return dog;
    }

    public void setDog(long dog) {
        this.dog = dog;
    }

    public long getCtl() {
        return ctl;
    }

    public void setCtl(long ctl) {
        this.ctl = ctl;
    }

    public long getRss() {
        return rss;
    }

    public void setRss(long rss) {
        this.rss = rss;
    }

    public long getTre() {
        return tre;
    }

    public void setTre(long tre) {
        this.tre = tre;
    }

    public long getTrp() {
        return trp;
    }

    public void setTrp(long trp) {
        this.trp = trp;
    }

    public long getPdefup() {
        return pdefup;
    }

    public void setPdefup(long pdefup) {
        this.pdefup = pdefup;
    }

    public long getSefeup() {
        return sefeup;
    }

    public void setSefeup(long sefeup) {
        this.sefeup = sefeup;
    }

    public long getPdefgd() {
        return pdefgd;
    }

    public void setPdefgd(long pdefgd) {
        this.pdefgd = pdefgd;
    }

    public long getSefegd() {
        return sefegd;
    }

    public void setSefegd(long sefegd) {
        this.sefegd = sefegd;
    }

    public long getAttAdd() {
        return attAdd;
    }

    public void setAttAdd(long attAdd) {
        this.attAdd = attAdd;
    }

    public long getPdefAdd() {
        return pdefAdd;
    }

    public void setPdefAdd(long pdefAdd) {
        this.pdefAdd = pdefAdd;
    }

    public long getSefeAdd() {
        return sefeAdd;
    }

    public void setSefeAdd(long sefeAdd) {
        this.sefeAdd = sefeAdd;
    }

    public long getLifeAdd() {
        return lifeAdd;
    }

    public void setLifeAdd(long lifeAdd) {
        this.lifeAdd = lifeAdd;
    }

    static public PropertyModule create(PropertyData propertyData) {
        PropertyModule module = new PropertyModule();
        module.setAtt(propertyData.getValue(PropertyType.P_攻击));
        module.setPdef(propertyData.getValue(PropertyType.P_防御));
        module.setSefe(propertyData.getValue(PropertyType.P_法防));
        module.setLife(propertyData.getValue(PropertyType.P_生命));
        module.setStr(propertyData.getValue(PropertyType.P_暴击));
        module.setAnt(propertyData.getValue(PropertyType.P_抗暴));
        module.setBus(propertyData.getValue(PropertyType.P_暴伤));
        module.setBud(propertyData.getValue(PropertyType.P_韧性));
        module.setFit(propertyData.getValue(PropertyType.P_命中));
        module.setDog(propertyData.getValue(PropertyType.P_闪避));
        module.setCtl(propertyData.getValue(PropertyType.P_控制));
        module.setRss(propertyData.getValue(PropertyType.P_抗控));
        module.setTre(propertyData.getValue(PropertyType.P_治疗));
        module.setTrp(propertyData.getValue(PropertyType.P_受疗));
        module.setPdefup(propertyData.getValue(PropertyType.P_增伤));
        module.setPdefgd(propertyData.getValue(PropertyType.P_减伤));
        module.setSefeup(propertyData.getValue(PropertyType.P_法增));
        module.setSefegd(propertyData.getValue(PropertyType.P_法减));

        module.setAttAdd(propertyData.getValue(PropertyType.P_攻击增幅));
        module.setPdefAdd(propertyData.getValue(PropertyType.P_防御增幅));
        module.setSefeAdd(propertyData.getValue(PropertyType.P_法防增幅));
        module.setLifeAdd(propertyData.getValue(PropertyType.P_生命增幅));
        module.setSpeed(propertyData.getValue(PropertyType.P_速度));

        return module;
    }


    static public PropertyData propertyData(PropertyModule module) {
        PropertyData propertyData = new PropertyData();
        propertyData.setValue(PropertyType.P_攻击, module.att);
        propertyData.setValue(PropertyType.P_防御, module.pdef);
        propertyData.setValue(PropertyType.P_法防, module.sefe);
        propertyData.setValue(PropertyType.P_生命, module.life);
        propertyData.setValue(PropertyType.P_暴击, module.str);
        propertyData.setValue(PropertyType.P_抗暴, module.ant);
        propertyData.setValue(PropertyType.P_暴伤, module.bus);
        propertyData.setValue(PropertyType.P_韧性, module.bud);
        propertyData.setValue(PropertyType.P_命中, module.fit);
        propertyData.setValue(PropertyType.P_闪避, module.dog);
        propertyData.setValue(PropertyType.P_控制, module.ctl);
        propertyData.setValue(PropertyType.P_抗控, module.rss);
        propertyData.setValue(PropertyType.P_治疗, module.tre);
        propertyData.setValue(PropertyType.P_受疗, module.trp);
        propertyData.setValue(PropertyType.P_增伤, module.pdefup);
        propertyData.setValue(PropertyType.P_减伤, module.pdefgd);
        propertyData.setValue(PropertyType.P_法增, module.sefeup);
        propertyData.setValue(PropertyType.P_法减, module.sefegd);

        propertyData.setValue(PropertyType.P_攻击增幅, module.attAdd);
        propertyData.setValue(PropertyType.P_防御增幅, module.pdefAdd);
        propertyData.setValue(PropertyType.P_法防增幅, module.sefeAdd);
        propertyData.setValue(PropertyType.P_生命增幅, module.lifeAdd);
        propertyData.setValue(PropertyType.P_速度, module.speed);
        return propertyData;
    }

    public void addPropertyDataBasicDegree(int degree,int addPrecent) {
        setAtt(getAtt() + getAtt() * degree * addPrecent / 100);
        setPdef(getPdef() + getPdef() * degree * addPrecent / 100);
        setSefe(getSefe() + getSefe() * degree * addPrecent / 100);
        setLife(getLife() + getLife() * degree * addPrecent / 100);
        setStr(getStr() + getStr() * degree * addPrecent / 100);
        setAnt(getAnt() + getAnt() * degree * addPrecent / 100);
        setBus(getBus() + getBus() * degree * addPrecent / 100);
        setBud(getBud() + getBud() * degree * addPrecent / 100);
        setFit(getFit() + getFit() * degree * addPrecent / 100);
        setDog(getDog() + getDog() * degree * addPrecent / 100);
        setCtl(getCtl() + getCtl() * degree * addPrecent / 100);
        setRss(getRss() + getRss() * degree * addPrecent / 100);
        setTre(getTre() + getTre() * degree * addPrecent / 100);
        setTrp(getTrp() + getTrp() * degree * addPrecent / 100);
        setPdefup(getPdefup() + getPdefup() * degree * addPrecent / 100);
        setPdefgd(getPdefgd() + getPdefgd() * degree * addPrecent / 100);
        setSefeup(getSefeup() + getSefeup() * degree * addPrecent / 100);
        setSefegd(getSefegd() + getSefegd() * degree * addPrecent / 100);
        setSpeed(getSpeed() + getSpeed() * degree * addPrecent / 100);
    }
}
